package com.bionic.ce.managedbeans;

import com.bionic.ce.entities.Currency;
import com.bionic.ce.entities.User;
import com.bionic.ce.entitybeans.currency.CurrencyFacadeLocal;
import com.bionic.ce.entitybeans.user.UserFacadeLocal;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.*;
import javax.faces.context.FacesContext;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;

/**
 *
 * @author Jarik
 */
@ManagedBean(name = "userManagedBean")
@SessionScoped
public class UserManagedBean implements Serializable {

    public UserManagedBean() {
    }
    @EJB
    private UserFacadeLocal userEJB;
    @EJB
    private CurrencyFacadeLocal currencyEJB;
    User user = new User();
    List<Currency> currencyList = new ArrayList<Currency>();
    //получаем ресурсы сервера для отправки сообщений
    @Resource(name = "jms/CurrencyExchangePool")
    private ConnectionFactory connectionFactory;
    @Resource(name = "jms/CurrencyExchangeTopic")
    private Destination queue;

    public void setUser(User user) {
        this.user = user;
    }

    public User getUser() {
        return user;
    }
    // создание пользователя
    public String doCreateUser() {
        userEJB.create(user);
        return "/index.xhtml?faces-redirect=true";
    }
    //обновление данных полтзователя
    public String doUpdateUser() {
        userEJB.edit(user);
        return "/pages/user/userinfo.xhtml?faces-redirect=true";
    }
    // проверка залогинившегося пользователя и отправка сообщения с его логином и паролем на сервер
    public String doLogin() {
        try {
            //создаем подключение
            Connection connection = connectionFactory.createConnection();
            Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
            MessageProducer producer = session.createProducer(queue);
            ObjectMessage message = session.createObjectMessage();
            message.setObject(user);
            producer.send(message);
            //отправляем сообщение
            producer.send(message);
            System.out.println("message sent");
            //закрываем соединения
            session.close();
            connection.close();
        } catch (JMSException ex) {
            System.err.println("Sending message error");
            ex.printStackTrace();
        }

        String page = null;
     List<User> list = userEJB.findByDynamicSelect(user);
        if (!list.isEmpty()) {
            user = (User) list.toArray()[0];
            currencyList = currencyEJB.findAll();
            page = "/index.xhtml?faces-redirect=true";
        } else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Loging error: ", "wrong login or password"));  
            user = new User();        
        }
        return page;
    }

    public String doLogout() {
        user = new User();
        currencyList = null;
        return "/index.xhtml?faces-redirect=true";
    }

    public String doDelete() {
        userEJB.remove(user);
        return "/index.xhtml?faces-redirect=true";
    }
    //проверка на наличие на даный момент залогинившегося пользователя
    public boolean isRegistered() {
        return (user.getEmail() != null);
    }
    
    public String goToAddUser() {
        user=new User();
        return "/index.xhtml?faces-redirect=true";
    }
}
